Плохо! Плохо!:  0
Показано с 1 по 6 из 6

Тема: [MZ] DKR_VisualHelper

  1. #1
    Бывалый Аватар для Darchan Kaen
    Информация о пользователе
    Регистрация
    17.06.2013
    Адрес
    Одесса
    Сообщений
    851
    Записей в дневнике
    3
    Репутация: 47 Добавить или отнять репутацию

    По умолчанию [MZ] DKR_VisualHelper

    Название плагина: DKR_VisualHelper

    Автор: DarchanKaen

    Версия: 1.0.0 для MZ

    Дата выхода:
    1.0.0 - 14.08.2022
    1.1.0 - 20.08.2022

    Описание плагина:
    Плагин позволяет упростить построение сцен, а именно - автоматизировать выбор графики чара для эвента.

    Использование плагина:
    У плагина нет параметров.

    В Комментарии эвента:
    <visualHelper: N, D>
    где:::
    N - номер персонажа из перечня Персонажей, чьи настройки графики чара нужно использовать;
    D - одно из четырех направлений (up, down, left, right).

    Команды (в эвенте, в команде "Скрипт"):
    Отсутствуют.

    Нюансы:
    0. Плагин носит экспериментальный характер, проверена корректность работы при сохранении / загрузке / переходу по локациям / смене страниц эвента по локальным и простым переключателям.
    1. Указываемый персонаж (Actor) должен быть в перечне Персонажей (наличие его в партии не обязательно)!
    2. Если у эвента задана графика, но есть и комментарий для плагина - плагин игнорирует графику эвента и меняет на заданную.
    3. На каждой странице эвента может присутствовать, или отсутствовать, свой комментарий для плагина.
    4. В эвенте, на странице, может быть несколько комментариев (до или после необходимого), в том числе не связанные с данным плагином - это не мешает работе.
    5. Если в эвенте, на странице, более одного комментария для данного плагина, то в работу берется первый из них.
    6. Вопрос совместимости, смотри раздел "Совместимость" в самом конце.

    Пример использования:
    В эвенте создаем комментарий с текстом <visualHelper: 11, down> - используем чар персонажа 11, с поворотом его вниз.
    Персонаж должен быть в перечне Персонажей, наличие в партии - не обязательно.
    ...в целом, логика схожа с логикой плагина DKR_DialogueHelper.

    Как это выглядит:
    Думаю, картинки излишни.

    Код:
    Спойлер Версия 1.1.0:
    Код:
    var Imported = Imported || {};
    Imported.DKR_VisualHelper = true;
    
    var DKR = DKR || {};          
    DKR.VisualHelper = DKR.VisualHelper || {}; 
    DKR.VisualHelper.version = 1.1;
    
    //-----------------------------------------------------------------------------
    /*:
     * @plugindesc (v.1.1.0) Плагин позволяет упростить построение сцен, а именно - автоматизировать выбор графики чара для эвента.
     * 
     * @target MZ
     * @author DarchanKaen
     *
     * @help
     *   DKR VisualHelper
     * ----------------------------------------------------------------------------
     * ---Общая информация:
     * Плагин позволяет упростить построение сцен,
     * а именно - автоматизировать выбор графики чара для эвента.
     * Указываемый персонаж (Actor) должен быть в перечне Персонажей 
     * (наличие его в партии не обязательно)!
     * ---Параметры плагина:
     * Отсутствуют.
     * --В Комментарии эвента:
     *  <visualHelper: N, D>
     *  где:::
     * N - номер персонажа из перечня Персонажей, чьи настройки графики чара 
     * нужно использовать;
     * D - одно из четырех направление (up, down, left, right).
     *  пример::: 
     * <visualHelper: 11, down> - используем чар персонажа 11, с поворотом его вниз
     * ---Команды(в эвенте команда "Скрипт"):
     * Отсутствуют. 
     */
     
    (() => {
    	
    	
    //--DATA: BEGIN
    	const COMMENT_COMMAND_NUMBER_A = 108;
    	const COMMENT_COMMAND_NUMBER_B = 408;
    	
    	const VH_BEGIN_CODENAME = '<visualHelper:';
    	const VH_END_CODENAME = '>';
    	const VH_DELEMITER = ',';
    //--DATA: END
    
    	
    //--LOGIC: BEGIN	
    	const isUseVisualHelp = (eventPage) =>{
    		let useVisualHelp = -1;
    		
    		let eventCurrentPageComments = getEventCommentsListOnPage(eventPage);
    		
    		for(let n = 0; n < eventCurrentPageComments.length; n++){
    			let currentComment = eventCurrentPageComments[n];
    			if( true === currentComment.includes(VH_BEGIN_CODENAME) ){
    				useVisualHelp = n;
    				break;
    			}
    		}
    		
    		return useVisualHelp;
    	}
    	
    	const getVisualData = (eventPage, commentIndex) => {
    		let visualData = null;
    		
    		let eventNote = getEventCommentsListOnPage(eventPage)[commentIndex];
    		let eventPreVisualData = preParseVisualData(eventNote);
    		
    		let actorId = eventPreVisualData[0];
    		let direction = eventPreVisualData[1];
    		
    		let visualActor = $gameActors._data[actorId];
    		if(undefined === visualActor){
    			visualActor = new Game_Actor(actorId);
    		}
    
    		visualData = [visualActor._characterName, direction, visualActor._characterIndex];
    		visualActor = null;
    
    		return visualData;
    	}
    	
    	const preParseVisualData = (eventNote) => {
    		let parsedVisualData = null;
    		
    		eventNote = eventNote.trim();
    		
    		try{
    			let parseBeginIndex = eventNote.indexOf(VH_BEGIN_CODENAME);
    			if(-1 === parseBeginIndex){
    				console.log('_DKR_VisualHelper: parseBeginIndex_PARSE_ERROR!');
    				return null;
    			}
    			let firstParsedString = eventNote.slice(parseBeginIndex);
    			
    			let parseEndIndex = firstParsedString.indexOf(VH_END_CODENAME);
    			if(-1 === parseEndIndex){
    				console.log('_DKR_VisualHelper: parseEndIndex_PARSE_ERROR!');
    				return null;
    			}
    			let secondParsedString = firstParsedString.slice(0, parseEndIndex);
    			let thirdParsedString = secondParsedString.split(VH_BEGIN_CODENAME);
    			let fourthParsedString = thirdParsedString[1].split(VH_DELEMITER);
    			
    			let actorId = parseInt(fourthParsedString[0].trim());
    			let direction = getDirectionByWord(fourthParsedString[1].trim());
    			
    			if(-1 === direction){
    				console.log('_DKR_VisualHelper: parseDirection_PARSE_ERROR!');
    				return null;
    			}
    			parsedVisualData = [actorId, direction];
    		}catch(error){
    			console.log('_DKR_VisualHelper: PARSE_ERROR!');
    			console.log(error);
    		}
    		
    		return parsedVisualData;
    	}
    	
    	const getDirectionByWord = (directionWord) => {
    		let direction = -1;
    		switch(directionWord){
    			case 'up':
    				direction = 8;
    				break;
    			case 'down':
    				direction = 2;
    				break;
    			case 'left':
    				direction = 4;
    				break;
    			case 'right':
    				direction = 6;
    				break;
    		}
    		
    		return direction;
    	}
    	
    	const getEventCommentsListOnPage = (eventPage) => {
    		let commentsList = [];
    		
    		let eventsCommandsList = eventPage.list;
    			
    			for(let m = 0; m < eventsCommandsList.length; m++){
    				let currentCommand = eventsCommandsList[m];
    				if(COMMENT_COMMAND_NUMBER_A === currentCommand.code || COMMENT_COMMAND_NUMBER_B === currentCommand.code){
    					let comment = currentCommand.parameters[0].trim();
    					if(comment.length > 0){
    						commentsList.push(comment);
    					}
    				}
    			}
    		
    		return commentsList;
    	}
    //--LOGIC: END	
    	
    	
    //--CHANGED CORE: BEGIN
    	Game_Event.prototype.setupPageSettings = function() {
    		const page = this.page();
    		const image = page.image;
    
    		//-DKR magic: begin
    		let visualHelpCommentId = isUseVisualHelp(page);
    		let visualData = null;
    		if( visualHelpCommentId > -1 ){
    			visualData = getVisualData(page, visualHelpCommentId);
    			if(null !== visualData){
    				image.tileId = 0;
                                    image.pattern = 1;
    				image.characterName = visualData[0];
    				image.direction = visualData[1];
    				image.characterIndex = visualData[2];
    			}else{
    				console.log('_DKR_VisualHelper: VISUAL_DATA_ERROR!');
    			}
    		}
    		//-DKR magic: end
    		
    		if (image.tileId > 0) {
    			this.setTileImage(image.tileId);
    		} else {
    			this.setImage(image.characterName, image.characterIndex);
    		}
    		if (this._originalDirection !== image.direction) {
    			this._originalDirection = image.direction;
    			this._prelockDirection = 0;
    			this.setDirectionFix(false);
    			this.setDirection(image.direction);
    		}
    		if (this._originalPattern !== image.pattern) {
    			this._originalPattern = image.pattern;
    			this.setPattern(image.pattern);
    		}
    		this.setMoveSpeed(page.moveSpeed);
    		this.setMoveFrequency(page.moveFrequency);
    		this.setPriorityType(page.priorityType);
    		this.setWalkAnime(page.walkAnime);
    		this.setStepAnime(page.stepAnime);
    		this.setDirectionFix(page.directionFix);
    		this.setThrough(page.through);
    		this.setMoveRoute(page.moveRoute);
    		this._moveType = page.moveType;
    		this._trigger = page.trigger;
    		if (this._trigger === 4) {
    			this._interpreter = new Game_Interpreter();
    		} else {
    			this._interpreter = null;
    		}
    	};
    //--CHANGED CORE: END
    	
    
    })();


    Загрузка:
    Спойлер Версия 1.1.0:


    Условия поставки плагина:
    Поставляется AS-IS.
    Вся ответственность при использовании - на Пользователе!
    !

    Совместимость:
    Плагин меняет - точнее, "расширяет" - логику обновления страницы эвента.
    Может быть не совместим с другими плагинами, влияющими на графику эвентов в частности или логику обновления страниц эвента в принципе.
    Помните, что плагин носит экспериментальный характер.

    Спойлер Лирическое отступление:
    Еще немножко quality-of-life.
    Я просто понял, что мне лень не только в диалогах прокликивать лица-имена-цвета, а еще и на картах расставлять большое количество эвентов
    с разной графикой.
    Почему бы им не грузиться автоматом (ну хотя-бы графике)?

    Может кому-то поможет на "Конкурсе енотов".
    Последний раз редактировалось Darchan Kaen; 20.08.2022 в 17:34. Причина: Обновлении до версии 1.1.0

  2. #2
    Администратор Аватар для Пётр
    Информация о пользователе
    Регистрация
    24.04.2014
    Адрес
    Краснодар
    Сообщений
    3,961
    Записей в дневнике
    6
    Репутация: 132 Добавить или отнять репутацию

    По умолчанию

    А можно для тупых и тех кто только из пещеры вылез разъяснить простыми словами чё этот плагин делает?

  3. #3
    Бывалый Аватар для Darchan Kaen
    Информация о пользователе
    Регистрация
    17.06.2013
    Адрес
    Одесса
    Сообщений
    851
    Записей в дневнике
    3
    Репутация: 47 Добавить или отнять репутацию

    По умолчанию

    Цитата Сообщение от Пётр Посмотреть сообщение
    А можно для тупых и тех кто только из пещеры вылез разъяснить простыми словами чё этот плагин делает?
    Ты расставляешь по карте эвенты-НПЦ с графикой чаров (люди-монстры-животные-машины-итд) и их много, а графики у тебя в папке тоже много. И они на нескольких картах повторяются. А может еще и их графика как-то от условий зависит, к тому же.

    Выбирать графику каждого эвента тебе лень, копипастить их тебе лень, выбирать в Движении эвентов / Скриптовой команде графику для эвентов тебе тоже лень.
    Все лень, короче.

    И вот ты подключаешь плагин и в эвенте можно графику не задавать, достаточно один раз в перечень Персонажей добавить перса с нужной графикой чара, и потом в эвенте прописыать комментарий с ссылкой на персонажа их базы данных, плагин подгрузит его внешний вид автоматически.

    ...копипастить эвенты, однако, все равно придется (плагин только графоний автоматизирует).

  4. #4
    Администратор Аватар для Пётр
    Информация о пользователе
    Регистрация
    24.04.2014
    Адрес
    Краснодар
    Сообщений
    3,961
    Записей в дневнике
    6
    Репутация: 132 Добавить или отнять репутацию

    По умолчанию

    А. Понял. Прикольно. Мне Мур когда то такой плагин делала для тбс

  5. #5
    Создатель Аватар для Рольф
    Информация о пользователе
    Регистрация
    14.04.2008
    Адрес
    Южно- Сахалинск/Пенза
    Сообщений
    10,145
    Записей в дневнике
    2
    Репутация: 108 Добавить или отнять репутацию

    По умолчанию

    А можно для тупых и тех кто только из пещеры вылез разъяснить простыми словами чё этот плагин делает?
    Хотя я понял, что он делает, но я опять буду ругать, что нет скринов. Ну можно же придумать, хотя бы схемки. Да не только в понимании дело, с картинками будет выглядеть по привольнее. Можно тут было вставить к примеру картинку из редактора сообщений с комментарием примером.

  6. #6
    Бывалый Аватар для Darchan Kaen
    Информация о пользователе
    Регистрация
    17.06.2013
    Адрес
    Одесса
    Сообщений
    851
    Записей в дневнике
    3
    Репутация: 47 Добавить или отнять репутацию

    По умолчанию

    Плагин обновлен до версии 1.1.0, ссылки и код обновлены.

    Изменения - исправлена недоработка кода, при которой выбиралась графика не полностью стоящего чара, а "находящегося в движении".

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Метки этой темы

Социальные закладки

Социальные закладки

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •  
[MZ] DKR_VisualHelper